using System;
using System.Collections.Generic;
using System.Text;
using EntidadesTO;
using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public class PersonaDA
    {
        public List<PersonaTO> BuscarPersonaFiltro(int pCodPersona, string pDesNombres, string pDesApellidoPaterno,
                                                 string pDesApellidoMaterno, string pDesRazonSocial, int pCodDocumento,
                                                 string pNumDocumento, int pTipoPersona)
        {
            List<PersonaTO> listaPersona = new List<PersonaTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_Persona_filter", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodPersona", pCodPersona);
                comando.Parameters.AddWithValue("@pDesNombres", pDesNombres);
                comando.Parameters.AddWithValue("@pDesApellidoPaterno", pDesApellidoPaterno);
                comando.Parameters.AddWithValue("@pDesApellidoMaterno", pDesApellidoMaterno);
                comando.Parameters.AddWithValue("@pDesRazonSocial", pDesRazonSocial);
                comando.Parameters.AddWithValue("@pCodDocumento", pCodDocumento);
                comando.Parameters.AddWithValue("@pNumDocumento", pNumDocumento);
                comando.Parameters.AddWithValue("@pTipoPersona", pTipoPersona);
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    PersonaTO personaTO = new PersonaTO();
                    //No nulos en BD
                    personaTO.CodPersona = reader.GetInt32(reader.GetOrdinal("codPersona"));
                    personaTO.DesDireccion = reader.GetString(reader.GetOrdinal("desDireccion"));
                    personaTO.NumDocumento = reader.GetString(reader.GetOrdinal("numDocumento"));
                    personaTO.SecDistrito = reader.GetInt32(reader.GetOrdinal("secDistrito"));
                    personaTO.SecPais = reader.GetInt32(reader.GetOrdinal("secPais"));
                    personaTO.CodDocumento = reader.GetInt32(reader.GetOrdinal("codDocumento"));
                    personaTO.CodTipoPersona = reader.GetInt32(reader.GetOrdinal("codTipoPersona"));
                    personaTO.DesSigla = reader.GetString(reader.GetOrdinal("desSigla"));
                    personaTO.CodContribuyente = reader.GetInt32(reader.GetOrdinal("codContribuyente"));

                    //Nulos en BD
                    if (reader.GetValue(reader.GetOrdinal("desCorreoElectronico")) == DBNull.Value)
                        personaTO.DesCorreoElectronico = null;
                    else
                        personaTO.DesCorreoElectronico = reader.GetString(reader.GetOrdinal("desCorreoElectronico"));

                    if (reader.GetValue(reader.GetOrdinal("desRazonSocial")) == DBNull.Value)
                        personaTO.DesRazonSocial = null;
                    else
                        personaTO.DesRazonSocial = reader.GetString(reader.GetOrdinal("desRazonSocial"));

                    if (reader.GetValue(reader.GetOrdinal("numTelefono1")) == DBNull.Value)
                        personaTO.NumTelefono1 = null;
                    else
                        personaTO.NumTelefono1 = reader.GetString(reader.GetOrdinal("numTelefono1"));

                    if (reader.GetValue(reader.GetOrdinal("numTelefono2")) == DBNull.Value)
                        personaTO.NumTelefono2 = null;
                    else
                        personaTO.NumTelefono2 = reader.GetString(reader.GetOrdinal("numTelefono2"));

                    if (reader.GetValue(reader.GetOrdinal("codUsuario")) == DBNull.Value)
                        personaTO.CodUsuario = -1;
                    else
                        personaTO.CodUsuario = reader.GetInt32(reader.GetOrdinal("codUsuario"));

                    if (reader.GetValue(reader.GetOrdinal("desApellidoPaterno")) == DBNull.Value)
                        personaTO.DesApellidoPaterno = null;
                    else
                        personaTO.DesApellidoPaterno = reader.GetString(reader.GetOrdinal("desApellidoPaterno"));

                    if (reader.GetValue(reader.GetOrdinal("desApellidoMaterno")) == DBNull.Value)
                        personaTO.DesApellidoMaterno = null;
                    else
                        personaTO.DesApellidoMaterno = reader.GetString(reader.GetOrdinal("desApellidoMaterno"));

                    if (reader.GetValue(reader.GetOrdinal("desNombres")) == DBNull.Value)
                        personaTO.DesNombres = null;
                    else
                        personaTO.DesNombres = reader.GetString(reader.GetOrdinal("desNombres"));

                    if (reader.GetValue(reader.GetOrdinal("fechaNacimiento")) == DBNull.Value)
                        personaTO.FechaNacimiento = DateTime.MinValue;
                    else
                        personaTO.FechaNacimiento = reader.GetDateTime(reader.GetOrdinal("fechaNacimiento"));

                    if (reader.GetValue(reader.GetOrdinal("desRepresentanteLegal")) == DBNull.Value)
                        personaTO.DesRepresentanteLegal = null;
                    else
                        personaTO.DesRepresentanteLegal = reader.GetString(reader.GetOrdinal("desRepresentanteLegal"));

                    if (reader.GetValue(reader.GetOrdinal("numTelefonoOficina")) == DBNull.Value)
                        personaTO.NumTelefonoOficina = null;
                    else
                        personaTO.NumTelefonoOficina = reader.GetString(reader.GetOrdinal("numTelefonoOficina"));

                    personaTO.ObtenerNombreCompleto();

                    listaPersona.Add(personaTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaPersona = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaPersona;

        }


        public List<PersonaTO> BuscarPersonaLlave(int pCodPersona)
        {
            List<PersonaTO> listaPersona = new List<PersonaTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_Persona_filter", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodPersona", pCodPersona);
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    PersonaTO personaTO = new PersonaTO();
                    //No nulos en BD
                    personaTO.CodPersona = reader.GetInt32(reader.GetOrdinal("codPersona"));
                    personaTO.DesDireccion = reader.GetString(reader.GetOrdinal("desDireccion"));
                    personaTO.NumDocumento = reader.GetString(reader.GetOrdinal("numDocumento"));
                    personaTO.SecDistrito = reader.GetInt32(reader.GetOrdinal("secDistrito"));
                    personaTO.SecPais = reader.GetInt32(reader.GetOrdinal("secPais"));
                    personaTO.CodDocumento = reader.GetInt32(reader.GetOrdinal("codDocumento"));
                    personaTO.CodTipoPersona = reader.GetInt32(reader.GetOrdinal("codTipoPersona"));
                    personaTO.CodContribuyente = reader.GetInt32(reader.GetOrdinal("codContribuyente"));

                    //Nulos en BD
                    if (reader.GetValue(reader.GetOrdinal("desCorreoElectronico")) == DBNull.Value)
                        personaTO.DesCorreoElectronico = null;
                    else
                        personaTO.DesCorreoElectronico = reader.GetString(reader.GetOrdinal("desCorreoElectronico"));

                    if (reader.GetValue(reader.GetOrdinal("desRazonSocial")) == DBNull.Value)
                        personaTO.DesRazonSocial = null;
                    else
                        personaTO.DesRazonSocial = reader.GetString(reader.GetOrdinal("desRazonSocial"));

                    if (reader.GetValue(reader.GetOrdinal("numTelefono1")) == DBNull.Value)
                        personaTO.NumTelefono1 = null;
                    else
                        personaTO.NumTelefono1 = reader.GetString(reader.GetOrdinal("numTelefono1"));

                    if (reader.GetValue(reader.GetOrdinal("numTelefono2")) == DBNull.Value)
                        personaTO.NumTelefono2 = null;
                    else
                        personaTO.NumTelefono2 = reader.GetString(reader.GetOrdinal("numTelefono2"));

                    if (reader.GetValue(reader.GetOrdinal("codUsuario")) == DBNull.Value)
                        personaTO.CodUsuario = -1;
                    else
                        personaTO.CodUsuario = reader.GetInt32(reader.GetOrdinal("codUsuario"));

                    if (reader.GetValue(reader.GetOrdinal("desApellidoPaterno")) == DBNull.Value)
                        personaTO.DesApellidoPaterno = null;
                    else
                        personaTO.DesApellidoPaterno = reader.GetString(reader.GetOrdinal("desApellidoPaterno"));

                    if (reader.GetValue(reader.GetOrdinal("desApellidoMaterno")) == DBNull.Value)
                        personaTO.DesApellidoMaterno = null;
                    else
                        personaTO.DesApellidoMaterno = reader.GetString(reader.GetOrdinal("desApellidoMaterno"));

                    if (reader.GetValue(reader.GetOrdinal("desNombres")) == DBNull.Value)
                        personaTO.DesNombres = null;
                    else
                        personaTO.DesNombres = reader.GetString(reader.GetOrdinal("desNombres"));

                    if (reader.GetValue(reader.GetOrdinal("fechaNacimiento")) == DBNull.Value)
                        personaTO.FechaNacimiento = DateTime.MinValue;
                    else
                        personaTO.FechaNacimiento = reader.GetDateTime(reader.GetOrdinal("fechaNacimiento"));

                    if (reader.GetValue(reader.GetOrdinal("desRepresentanteLegal")) == DBNull.Value)
                        personaTO.DesRepresentanteLegal = null;
                    else
                        personaTO.DesRepresentanteLegal = reader.GetString(reader.GetOrdinal("desRepresentanteLegal"));

                    if (reader.GetValue(reader.GetOrdinal("numTelefonoOficina")) == DBNull.Value)
                        personaTO.NumTelefonoOficina = null;
                    else
                        personaTO.NumTelefonoOficina = reader.GetString(reader.GetOrdinal("numTelefonoOficina"));

                    listaPersona.Add(personaTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaPersona = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaPersona;

        }
    }
}
